package org.dwpd.domain.message;

import lombok.Data;
import org.dwpd.utils.DateUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

@Data
public class MessageEsInfo {
    private Integer messageId; // 帖子id 自增长
    private Integer userId; // 用户id
    private String userName; // 用户名称
    private String userImage; // 用户头像
    private Integer level; // 用户等级
    private String startPoint; // 出发地
    private String endPoint; // 目的地
    private Date startTime; // 出发时间
    private Integer peopleNum; // 需要拼车人数
    private String messageContent; // 需求备注
    private Integer lockFlag; // 锁帖标志 0表示未锁，1表示已锁
    private Date createTime; // 创建时间
    private Date updateTime; // 更新时间

    private boolean isAD; // 是否置顶
    private List<String> suggestion; // 自动补全数据

    public MessageEsInfo() {

    }

    public MessageEsInfo(MessageInfo message) {

        this.setMessageId(message.getMessageId());
        this.setUserId(message.getUserId());
        this.setUserName(message.getUserName());
        this.setUserImage(message.getUserImage());
        this.setStartPoint(message.getStartPoint());
        this.setEndPoint(message.getEndPoint());
//        this.setStartTime(message.getStartTime());  // 这里会调用 MessageInfo 的 setStartTime 方法进行时间格式化
        this.setPeopleNum(message.getPeopleNum());
        this.setMessageContent(message.getMessageContent());
        this.setLockFlag(message.getLockFlag());
        try {
            this.setCreateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(message.getCreateTime()));
            this.setUpdateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(message.getUpdateTime()));
            this.setStartTime(new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(message.getStartTime()));
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        this.suggestion = Arrays.asList(this.startPoint, this.endPoint, getStartTime(), this.peopleNum.toString());
    }


    // 格式化日期时间方法
    private String formatDateTime(String dateTime) {
        String[] dateFormats = {"yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm"};
        Date date = null;

        for (String format : dateFormats) {
            try {
                SimpleDateFormat inputFormat = new SimpleDateFormat(format);
                inputFormat.setLenient(false); // 严格解析
                date = inputFormat.parse(dateTime);
                break; // 如果解析成功，跳出循环
            } catch (ParseException e) {
                // 忽略解析错误，尝试下一个格式
            }
        }

        if (date != null) {
            SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
            return outputFormat.format(date);
        } else {
            // 如果所有格式都无法解析，直接返回原始字符串
            return dateTime;
        }
    }

    // 按格式返回创建时间
    public String getStartTime() {
        return new SimpleDateFormat("yyyy-MM-dd HH:mm").format(startTime);
    }

    // 按格式返回创建时间
    public String getCreateTime() {

        if (createTime == null) {
            return DateUtils.dateFormat(new Date(System.currentTimeMillis()));
        }
        return DateUtils.dateFormat(createTime);
    }

    // 按格式返回更新时间
    public String getUpdateTime() {
        if (updateTime == null) {
            return DateUtils.dateFormat(new Date(System.currentTimeMillis()));
        }
        return DateUtils.dateFormat(updateTime);
    }
}
